import pandas as pd
# 读取CSV文件
df = pd.read_csv('TSLA.csv')
# 删除非交易日数据（NaN值）
df_dropped_nan = df.dropna()
nan_count = df.shape[0] - df_dropped_nan.shape[0]
print(f'删除了 {nan_count} 行非交易日数据。')
# 删除日期重复的数据
df_unique_date = df_dropped_nan.drop_duplicates(subset='Date')
dup_count = df_dropped_nan.shape[0] - df_unique_date.shape[0]
print(f'删除了 {dup_count} 行重复的日期数据。')
# 计算股价单日涨跌幅度超过±10%的次数
# 先计算前一日的收盘价
df_unique_date['Previous_Close'] = df_unique_date['Price'].shift(1)
# 计算涨跌幅度
df_unique_date['Change_Percentage'] = (df_unique_date['Price'] - df_unique_date['Previous_Close']) / df_unique_date['Previous_Close'] * 100
# 过滤出涨跌幅度超过±10%的记录
exceeded_10_percent_mask = (df_unique_date['Change_Percentage'] > 10) | (df_unique_date['Change_Percentage'] < -10)
exceeded_10_percent_count = exceeded_10_percent_mask.sum()
print(f'股价单日涨跌幅度超过±10%的次数为：{exceeded_10_percent_count}')
# 计算每日股价最高与最低之间的差值
df_unique_date['Diff'] = df_unique_date['High'] - df_unique_date['Low']
# 保存经过前述数据清洗后的结果到新的CSV文件
df_unique_date.to_csv('TSLA_cleaned.csv', index=False)
# 打印总计天数
print(f'总计天数为：{df_unique_date.shape[0]}')